; CyUku/src/libs/c_interface.asm
; C语言接口实现

section .text
global call_c_function
global load_c_library

; 加载C库
load_c_library:
    push rbp
    mov rbp, rsp
    mov rax, SYS_LOADLIB
    mov rdi, [rbp + 16]  ; 库路径
    xor rsi, rsi
    syscall
    test rax, rax
    js .error
    mov [c_lib_handle], rax
    leave
    ret

; 调用C函数
call_c_function:
    push rbp
    mov rbp, rsp
    ; 准备参数
    mov rdi, [rbp + 16]  ; 函数名
    mov rsi, [rbp + 24]  ; 参数数组
    mov rdx, [rbp + 32]  ; 参数个数
    
    ; 获取函数地址
    mov rax, [c_lib_handle]
    call dlsym
    test rax, rax
    jz .error
    
    ; 根据参数个数设置寄存器/栈
    cmp rdx, 0
    je .call
    cmp rdx, 1
    je .one_arg
    ; ... 其他参数处理
    
    .one_arg:
        mov rdi, [rsi]
        call rax
        jmp .done
    
    .call:
        call rax
    
    .done:
        leave
        ret

section .data
    c_lib_handle dq 0
    SYS_LOADLIB equ 10